In general, a cache is a place for temporarily storing a thing so that the thing can be accessed more quickly and/or efficiently than is possible where the thing is normally stored. Within the context of computer systems, a cache is usually memory used for temporarily storing data so that the data can be accessed more quickly and/or efficiently than is possible in the memory in which the data normally resides. Thus, volatile memory is typically used to cache data that resides on non-volatile memory, such as magnetic disks. Similarly, fast volatile memory is typically used to cache data that resides in slower volatile memory. It is common for computer systems to use multiple levels of cache, where each level of cache is typically smaller and faster than the preceding level.
In systems that include multiple processing nodes, a centralized cache of volatile memory can be used by all of the nodes to cache data items that reside on non-volatile memory. Such centralized shared cache systems typically suffer from two problems. First, a centralized shared cache system can be a scalability bottleneck due to the fact that communication is required between each module of shared memory and every processing node in the system. Thus, the more nodes, the greater the expense of increasing memory, and the more memory, the greater the expense of adding more nodes.
Second, a centralized shared cache constitutes a single point of failure for all nodes in a shared everything system. Since the centralized shared cache serves to cache data for all nodes, cached data for every node may be lost by the failure of the single centralized cache. Because of the potential catastrophic effect of such a failure, the centralized shared cache is usually a specialized computer that is also possibly duplexed.